// @ts-check



// const man = {
//     name: 'jscoder',
//     age: 22
// }

// const proxy = new Proxy(man, {
//     get: function (target, property) {
//         if (property in target) {
//             return target[property]
//         } else {
//             throw new ReferenceError(`Property ${property} does not exist`)
//         }
//     }
// })

// proxy.age


// function red(){
//     console.log('red');
// }
// function green(){
//     console.log('green');
// }
// function yellow(){
//     console.log('yellow');
// }

// var light = function(timer, fn){
//     return new Promise(resolve => {
//         setTimeout(()=>{
//             fn()
//             resolve()
//         },timer)
//     })
// }

// var step1 = function(){
//     light(3000, red).then(()=>{
//         return light(2000, green)
//     }).then(()=>{
//         return light(1000, yellow)
//     }).then(()=>{
//         step1()
//     })
// }

// step1()



var User = {
    count: 1,
    action: {
        getCount: function () {
            return this.count
        }
    }
}

var getCount = User.action.getCount
console.log(getCount())

setTimeout(() => {
    console.log('result1', User.action.getCount())
})

console.log("result2", getCount())

async function func1() {
    console.log('func1');

    var a = await func2(); //当await返回非promise

    console.log('func1 return');
}

function func2() {

    console.log('func2');

} //返回undefined

func1();

new Promise(function (resolve) {

    console.log('promise1');

    resolve('resolved');

}).then(function (data) {

    console.log(data);

});


function debounce(fn,delay){
    return function(){
        let timer = null, args = arguments;
        clearTimeout()
        timer = setTimeout(()=>{
            fn.apply(this, args)
        },delay)
    }
}

debounce(()=>{
    console.log(1)
},1000)()
